Например, Бобцов

ТЕСТИРОВАНИЕ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ С БЛОКИРОВКАМИ НА НЕАТОМАРНЫХ ПЕРЕМЕННЫХ 

Аннотация:

Предмет исследования. Исследован существующий алгоритм фаззинг-тестирования для поиска ошибок типа гонки данных в многопоточных программных приложениях, реализованный в инструменте Google TSan. Недостатком исследованного алгоритма является отсутствие возможности тестирования программных приложений, использующих неатомарные переменные. Это исключает возможность применения подобного инструмента для тестирования современных приложений, реализующих совместный доступ программных потоков к данным. Предложен новый алгоритм фаззинг-тестирования многопоточных приложений и способ внедрения его в модуль фаззинг-тестирования инструмента Google TSan. Метод. При фаззинг-тестировании многопоточных приложений входными данными являются различные комбинации исполнения программных потоков. Предложенный метод фаззинг-тестирования многопоточных программных приложений строится на предположении, что ошибки в многопоточных приложениях проявляются только в точках переключения потоков — точках синхронизации. Планировщик потоков реализован максимально просто. Каждому потоку назначается маркер состояния, позволяющий отслеживать его активность в процессе работы программы. Поток может находиться в неизвестном состоянии (до первой точки синхронизации), в состоянии исполнения, в ожидании — в очереди на исполнение, а также в состоянии, когда поток исчерпал свой квант исполнения, но не достиг точки синхронизации. Подобное состояние потока при достижении точки синхронизации автоматически меняется на состояние ожидания. Управление потоками осуществляется с помощью отдельного программного потока, следящего за состояниями всех потоков и выставляющего потокам, исчерпавшим квант исполнения, соответствующий маркер. Механизм поиска ошибок внедряется в программный продукт на этапе компиляции при указании соответствующих опций. Основные результаты. В инструмент Google TSan внедрен новый модуль фаззинг-тестирования, который позволяет находить ошибки типа гонки данных в любых многопоточных приложениях как с синхронизацией доступа к разделяемым данным, так и при совместном доступе программных потоков к данным. Практическая значимость. Верификация многопоточных приложений с совместным доступом к данным, в частности использующих неатомарные переменные, особенно актуальна для высоконагруженных масштабируемых программных систем.

Ключевые слова:

Статьи в номере